<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title></title>
</head>

<body>
    <div class="tools">
        <button type="button" class="btn green" id="excell" onclick="method5('dataTable')">导出考勤表格</button>
    </div>

    <table border="1" id="dataTable">
        <tr>
            <td>王婷111</td>
            <td>一见倾城333 </td>
        </tr>
        <tr>
            <td>祈澈姑娘222</td>
            <td>Python开发者交流平台44</td>
        </tr>
        <tr>
            <td>wwwangting888</td>
            <td>13661725475</td>
        </tr>
    </table>

</body>
<script>
    //打印表格
    var idTmr;
    //    判断浏览器的类型
    function getExplorer() {
        // 浏览器的内核
        var explorer = window.navigator.userAgent;
        //ie  
        if (explorer.indexOf("MSIE") >= 0) {
            return 'ie';
        }
        //firefox  
        else if (explorer.indexOf("Firefox") >= 0) {
            return 'Firefox';
        }
        //Chrome  
        else if (explorer.indexOf("Chrome") >= 0) {
            return 'Chrome';
        }
        //Opera  
        else if (explorer.indexOf("Opera") >= 0) {
            return 'Opera';
        }
        //Safari  
        else if (explorer.indexOf("Safari") >= 0) {
            return 'Safari';
        }
    }

    function method5(tableid) {
        // ie浏览器的处理方式
        if (getExplorer() == 'ie') {
            var curTbl = document.getElementById(tableid);
            var oXL = new ActiveXObject("Excel.Application");
            var oWB = oXL.Workbooks.Add();
            var xlsheet = oWB.Worksheets(1);
            var sel = document.body.createTextRange();
            sel.moveToElementText(curTbl);
            sel.select();
            sel.execCommand("Copy");
            xlsheet.Paste();
            oXL.Visible = true;

            try {
                var fname = oXL.Application.GetSaveAsFilename("Excel.xls",
                    "Excel Spreadsheets (*.xls), *.xls");
            } catch (e) {
                print("Nested catch caught " + e);
            } finally {
                // 清空数据
                oWB.SaveAs(fname);
                oWB.Close(savechanges = false);
                oXL.Quit();
                oXL = null;
                idTmr = window.setInterval("Cleanup();", 1);
            }

        } else {
            // 标准浏览器的方式
            tableToExcel(tableid)
        }
    }

    function Cleanup() {
        window.clearInterval(idTmr);
        CollectGarbage();
    }
    var tableToExcel = (function () {
        var uri = 'data:application/vnd.ms-excel;base64,',
            template = '<html><head><meta charset="UTF-8"></head><body><table  border="1">{table}</table></body></html>',
            base64 = function (s) {
                // window.btoa(str) 将str转化成base64的方法  base64转字符串 window.atob() 将base64转变成字符串
                // 我们将使用 escape() 来编码字符串(空格)Visit%20W3School%21  然后使用 unescape() 对其解码 Visit W3School!
                // 替代因此应该用 decodeURI() 和 decodeURIComponent() 取而代之。 
                // encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。 
                // ----------------------------------------------------------------------
                // 提示：请注意 encodeURIComponent() 函数 与 encodeURI() 函数的区别之处，
                // 前者假定它的参数是 URI 的一部分（比如协议、主机名、路径或查询字符串）。
                // ----------------------------------------------------------------------
                // 因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。"http://www.w3school.com.cn/p 1/" 
                // 加密 http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F 
                return window.btoa(unescape(encodeURIComponent(s)))
            },
            format = function (s, c) {
                return s.replace(/{(\w+)}/g, function (m, p) {
                    return c[p];
                })
            }
        return function (table, name) {
            if (!table.nodeType)
                table = document.getElementById(table)
            var ctx = {
                worksheet: name || 'Worksheet',
                table: table.innerHTML
            }
            let a=document.createElement('a');
            a.href=uri + base64(format(template, ctx))
            a.download='下载.xls'
            a.click()
            // window.location.href = uri + base64(format(template, ctx))
        }
    })()
</script>

</html>